//
//  TravelsAuthor_LoveCollectionFlowLayout.m
//  艾听歌
//
//  Created by dllo on 16/5/28.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "TravelsAuthor_LoveCollectionFlowLayout.h"

@implementation TravelsAuthor_LoveCollectionFlowLayout

#pragma mark --第二个方法
//重写初始化方法

-(instancetype)init{
    self = [super init];
    if (self) {
        
        self.columYDic = [NSMutableDictionary dictionary];
        //列数
        //        self.columCounts = 3;
        //边界值
        //        self.edgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);
        //列边距
        //        self.columSpace = 10;
        //初始化
        self.attributesArray = [NSMutableArray array];
        
    }
    
    return self;
}




#pragma mark --第一个方法

//布局item之前的准备方法
-(void)prepareLayout{
    
    [super prepareLayout];
    
    //1.使用字典保存三列的y值(要初始化);
    
    for (int i = 0; i < self.columCounts; i++) {
        
        NSString *key = [NSString stringWithFormat:@"%d",i];
        //@()字面量方式, 将基本类型转换成number类型
        //        [self.columYDic setObject:@(self.edgeInsets.top) forKey:key];
        //字典的简单写法
        self.columYDic[key] = @(self.edgeInsets.top);
        
    }
    
    //得到item的个数
    //self.collectionView是继承与父类UICollectionViewFlowLayout的
    NSInteger num = [self.collectionView numberOfItemsInSection:0];
    
    for (int i = 0 ; i < num; i++) {
        
        [self setItemFrame:i];
        
    }
}




#pragma mark ---第三个方法设置item的坐标

-(void)setItemFrame:(NSInteger)index{
    
    //定义一个始终保存最短列小标的变量
    __block NSString *minKey = @"0";
    //找到最短的那列
    //枚举器遍历
    [self.columYDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        if ([obj floatValue] < [self.columYDic[minKey] floatValue]) {
            
            minKey = key;
        }
        
    }];
    
    //2.设置item的坐标和大小
    
    //宽 = (414 - 左边距 - 右边距 - 列间距 * (列数 - 1)) / 列数
    
    CGFloat width = (414 - self.edgeInsets.left - self.edgeInsets.right - self.columSpace * (self.columCounts - 1)) / self.columCounts;
    
    //x  = 左边界 + (宽 + 列间距) * 列号
    CGFloat x = self.edgeInsets.left + (width + self.columSpace) * [minKey floatValue];
    
    
    //!!!!!!!!
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
    
    //高 = VC 里协议方法中设置的高度
    CGFloat height = [self.ytDelegate ytFlowLayout:self heightForItemAtIndexPath:indexPath itemWidth:width];
    
    //y = 字典里的y值
    CGFloat y = [self.columYDic[minKey] floatValue];
    
    //更新最短的y值
    self.columYDic[minKey] = @(y+height + self.rowSpace);
    
    
    //设置item的坐标属性信息
    //该类是专门设置item的frame,透明度,颜色等属性信息.
    //根据indexPath取出对应的attributes对象
    UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
    
    //设置frame的值
    attributes.frame = CGRectMake(x, y, width, height);
    
    //存入数组
    [self.attributesArray addObject:attributes];
    
}

#pragma mark -- 第四个方法

//重写系统方法,告诉collectionView布局item信息

-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{
    
    
    return  self.attributesArray;
    
    
}


#pragma mark --第五个设置滚动范围

-(CGSize)collectionViewContentSize{
    
    
    __block NSString *maxY = @"0";
    //找到最长的列
    [self.columYDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        if ([obj floatValue] > [self.columYDic[maxY] floatValue]) {
            maxY = key;
        }
        
    }];
    
    return CGSizeMake(0, [self.columYDic[maxY] floatValue] + self.edgeInsets.bottom);
    
}




@end
